package com.itany.corejava.code07_面向对象.抽象类;

/**
 * @author MissChen
 * @version 1.0
 * @date 2023 年11月06日 14:42
 */
public class Test01_抽象类 {
    public static void main(String[] args) {

        // 抽象类不能被实例化。即: 无法通过new 去创建一个对象, 该类一般 只用于被子类继承
        // Person person=new Person();//抽象类不能实例化
        Person person=new Man("宋晨峰",10000);
        person.show();
        // Person person1=new Woman();//抽象类不能被实例化

    }
}

//抽象类
abstract  class Person{
    private String name;

    public Person(String name) {
        this.name = name;
    }

    //在一个类中, 只要存在了抽象方法, 当前类必须是抽象类

    // 抽象方法只有声明, 没有方法体。即: 抽象方法不需要实现, 在参数列表之后直接以分号结束即可
    public abstract void show();
    public void print(){
        System.out.println("这是抽象类中的普通方法");
    }
}

// 子类继承抽象类后, 必须重写父类中所有的抽象方法。除非子类也是抽象类, 则可以不重写抽象方法
class Man extends Person{
    private double salary;

    public Man(String name, double salary) {
        super(name);
        this.salary = salary;
    }

    public double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }

    @Override
    public void show() {
        System.out.println("我是一个男的，我要养家糊口，今年大家的日子都不好过");
    }
}
//子类也是抽象类，则可以不用重写抽象方法
abstract class Woman extends Person{
    public Woman(String name) {
        super(name);
    }
}
